/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.oscar.icq.setting;

//import ru.oscar.icq.DataWork;
//import ru.oscar.icq.Tlv;

/**
 * @author Kornackiy Alexsandr
 */
public class Capabilities {
    
    /*ICQ server relay (клиент поддерживает получение сообщений)*/
    public static final byte[] AIM_SERVER_RELAY_CAPS = { 0x09, 0x46, 0x13, 0x49,0x4C, 0x7F, 0x11, (byte) 0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*File transfer (клиент поддерживает передачу файлов)*/
    private static final byte[] AIM_SUPPORT_FILE_TRANSFERS_CAPS = { 0x09, 0x46, 0x13, 0x43, 0x4C, 0x7F, 0x11, (byte) 0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*File sharing (клиент поддерживает передачу файлов)*/
    private static final byte[] FILE_SHARING_CAPS = { 0x09, 0x46, 0x13, 0x48, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Short capabilities (клиент поддерживает обработку сокращенных кодов возможностей)*/
    private static final byte[] AIM_LIST_SHORT_CAPS = { 0x09, 0x46, 0x00, 0x00, 0x4C, 0x7F, 0x11, (byte) 0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*клиент поддерживает UTF-8 кодировку в сообщениях*/
    public static final byte[] UTF8_SUPPORT_CAPS = { 0x09, 0x46, 0x13, 0x4E, 0x4C, 0x7F, 0x11, (byte) 0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*RTF messages (клиент поддерживает обработку сообщений в RTF формате)*/
    private static final byte[] AIM_ICQ_RTF_CAPS = { (byte) 0x97, (byte) 0xB1, 0x27, 0x51, 0x24, 0x3C, 0x43, 0x34, (byte) 0xAD, 0x22, (byte) 0xD6, (byte) 0xAB, (byte) 0xF7, 0x3f, (byte) 0x14, (byte) 0x92 };
    /*ICQ direct connect (клиент поддерживает прямые подключения)*/
    private static final byte[] ICQ_DIRECT_CONNECT_CAPS = { 0x09, 0x46, 0x13, 0x44, 0x4C, 0x7F, 0x11, (byte) 0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*ICQ avatars (клиент поддерживает получение аватар пользователей ICQ)*/
    private static final byte[] ICQ_DEVILS_CAPS = { 0x09, 0x46, 0x13, 0x4C, 0x4C, 0x7F, 0x11, (byte) 0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*ICQ Xtraz support (клиент поддерживает сервисы ICQ Xtraz)*/
    private static final byte[] ICQ_XTRAZ_CAPS = { (byte)0x1A, 0x09, 0x3C, 0x6C, (byte)0xD7, (byte)0xFD, 0x4E, (byte) 0xC5, (byte) 0x9D, 0x51, (byte)0xA6, 0x47, 0x4E, 0x34, (byte)0xF5, (byte)0xA0 };
    /*AIM ICQ support (клиент поддерживает обмен сообщениями с пользователям AIM и ICQ)*/
    private static final byte[] AIM_RECIVE_FROM_ICQ_CAPS = { 0x09, 0x46, 0x13, 0x4D, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte) 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*HTML messages (клиент поддерживает обработку сообщений с HTML тэгами)*/
    private static final byte[] HTML_MESSAGES_CAPS = {0x01, 0x38, (byte)0xCA, 0x7B, 0x76, (byte)0x9A, 0x49,0x15, (byte)0x88, (byte)0xF2, 0x13, (byte)0xFC, 0x00, (byte)0x97, (byte)0x9E, (byte)0xA8};
    /*Live video (клиент поддерживает потоковое видео)*/
    private static final byte[] LIVE_VIDEO_CAPS = { 0x09, 0x46, 0x01, 0x01, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Camera (клиент поддерживает веб-камеру)*/
    private static final byte[] WEB_CAMERA_CAPS = { 0x09, 0x46, 0x01, 0x02, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Live audio (клиент поддерживает потоковое аудио)*/
    private static final byte[] LIVE_AUDIO_CAPS = { 0x09, 0x46, 0x01, 0x04, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Available for call (клиент поддерживает звонки через интернет)*/
    private static final byte[] AVILABLE_FOR_CALL_CAPS = { 0x09, 0x46, 0x01, 0x05, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Multi audio (клиент поддерживает расширенное аудио)*/
    private static final byte[] MULTI_AUDIO_CAPS = { 0x09, 0x46, 0x01, 0x07, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Status text aware*/
    private static final byte[] STATUS_TEXT_AWARE_CAPS = { 0x09, 0x46, 0x01, 0x0A, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 }; 
    /*Buddy icon (клиент поддерживает получение иконок пользователей AIM)*/
    private static final byte[] BUDDY_ICON_CAPS  = { 0x09, 0x46, 0x13, 0x46, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Typing notifications (клиент поддерживает оповещения о наборе текста)*/
    private static final byte[] TYPING_NOTIFICATIONS_CAPS = { (byte)0x56, (byte)0x3f, (byte)0xc8, (byte)0x09, (byte)0x0b, (byte)0x6f, (byte)0x41, (byte)0xbd, (byte)0x9f, (byte)0x79, (byte)0x42, (byte)0x26, (byte)0x09, (byte)0xdf, (byte)0xa2, (byte)0xf3 };
    /*Send buddy list (клиент поддерживает передачу списка контактов)*/
    private static final byte[] SEND_BUDDY_LIST_CAPS = { 0x09, 0x46, 0x13, 0x4B, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*Games (клиент поддерживает сервис с играми)*/
    private static final byte[] GAME_CAPS = { 0x09, 0x46, 0x13, 0x4A, 0x4C, 0x7F, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*XMultiUser Chat (клиент поддерживает групповые чаты)*/
    private static final byte[] XMULTIUSER_CHAT_CAPS = { 0x67, 0x36, 0x15, 0x15, 0x61, 0x2D, 0x4C, 0x07, (byte)0x8F, 0x3D, (byte)0xBD, (byte)0xE6, 0x40, (byte)0x8E, (byte)0xA0, 0x41 };
    /*Chat support (клиент поддерживает чаты)*/
    private static final byte[] CHAT_SUPPORT_CAPS = { 0x74, (byte)0x8F, 0x24, 0x20, 0x62, (byte)0x87, 0x11, (byte)0xD1, (byte)0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 };
    /*ICQ-XtZers (клиент поддерживает сервис флеш анимации)*/
    private static final byte[] XTZERS_CAPS = { (byte)0xB2, (byte)0xEC, (byte)0x8F, 0x16, 0x7C, 0x6F, 0x45, 0x1B, (byte)0xBD, 0x79, (byte)0xDC, 0x58, 0x49, 0x78, (byte)0x88, (byte)0xB9 };
    /*Voice chat (клиент поддерживает голосовой чат)*/
    private static final byte[] VOICE_CHAT_CAPS = { (byte)0xB9, (byte)0x97, 0x08, (byte)0xB5, 0x3A, (byte)0x92, 0x42, 0x02, (byte)0xB0, 0x69, (byte)0xF1, (byte)0xE7, 0x57, (byte)0xBB, 0x2E, 0x17 };
    /*Push2Talk (клиент поддерживает голосовое общение через сервис VoIP)*/
    private static final byte[] PUCH2TALS_CAPS = { (byte)0xE3, 0x62, (byte)0xC1, (byte)0xE9, 0x12, 0x1A, 0x4B, (byte)0x94, (byte)0xA6, 0x26, 0x7A, 0x74, (byte)0xDE, 0x24, 0x27, 0x0D };
    /*Alter Acks ? (qip)*/
    private static final byte[] ALTER_ACKS_CAPS = { 0x66, 0x4F, (byte)0xC8, 0x09, 0x0B, 0x6F, 0x41, (byte)0xBD, (byte)0x9F, 0x79, 0x42, 0x26, 0x09, (byte)0xDF, (byte)0xA2, (byte)0xF3 };
    
    /*???*/
    private static final byte[] ALTER_ACKS = {0x66, 0x4f, (byte)0xc8, 0x09, 0x0b, 0x6f, 0x41, (byte)0xbd, (byte)0x9f, 0x79, 0x42, 0x26, 0x09, (byte)0xdf, (byte)0xa2, (byte)0xf3};    
    /*???*/
    public static final byte[] XSTATUS_ENGINEERING  = {(byte)0xba, 0x74, (byte)0xdb, 0x3e, (byte)0x9e, 0x24, 0x43, 0x4b, (byte)0x87, (byte)0xb6, 0x2f, 0x6b, (byte)0x8d, (byte)0xfe, (byte)0xe5, 0x0f};
    
    public static final byte[] UTF8_GUID = { (byte) 0x7b, (byte) 0x30,
            (byte) 0x39, (byte) 0x34, (byte) 0x36, (byte) 0x31, (byte) 0x33,
            (byte) 0x34, (byte) 0x45, (byte) 0x2D, (byte) 0x34, (byte) 0x43,
            (byte) 0x37, (byte) 0x46, (byte) 0x2D, (byte) 0x31, (byte) 0x31,
            (byte) 0x44, (byte) 0x31, (byte) 0x2D, (byte) 0x38, (byte) 0x32,
            (byte) 0x32, (byte) 0x32, (byte) 0x2D, (byte) 0x34, (byte) 0x34,
            (byte) 0x34, (byte) 0x35, (byte) 0x35, (byte) 0x33, (byte) 0x35,
            (byte) 0x34, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30,
            (byte) 0x7D };
    
    public static final byte[] XTRAZ_GUID = { (byte)0x3b, (byte)0x60, (byte)0xb3, 
            (byte)0xef, (byte)0xd8, (byte)0x2a, (byte)0x6c, (byte)0x45, (byte)0xa4,
            (byte)0xe0, (byte)0x9c, (byte)0x5a, (byte)0x5e, (byte)0x67, (byte)0xe8, 
            (byte)0x65 };  
    
    public static final int JIL = 1;

    private static final byte[] CAP_JIL = new byte[]{'J', 'a', 'v', 'a', ' ', 'I', 'C', 'Q', ' ', 'L', 'i', 'b', 'r', 'a', 'r', 'y'};
       
    private int client = 0;
    
    public Capabilities(int client){
        this.client = client;
    }
    
    public byte[] getClient(){
        if(client == JIL){
            return getJIL();
        }
        return null;
    }       
    
    private byte[] getJIL(){
        byte[] data = new byte[112];
        System.arraycopy(AIM_SERVER_RELAY_CAPS, 0, data, 0, 16);
        System.arraycopy(STATUS_TEXT_AWARE_CAPS, 0, data, 16, 16);
        System.arraycopy(AIM_RECIVE_FROM_ICQ_CAPS, 0, data, 16*2, 16);
        System.arraycopy(ICQ_DIRECT_CONNECT_CAPS, 0, data, 16*3, 16);
        System.arraycopy(UTF8_SUPPORT_CAPS, 0, data, 16*4, 16);
        System.arraycopy(ICQ_XTRAZ_CAPS, 0, data, 16*5, 16);
        System.arraycopy(AIM_LIST_SHORT_CAPS, 0, data, 16*6, 16);
        System.arraycopy(CAP_JIL, 0, data, 16*6, 16);
        return data;
    }
    
    
}
